// 游戏开始提示实体类：用于显示游戏开始时的按键提示，支持键盘和触摸输入
class StartPrompt extends Entity {
    // 构造函数：初始化开始提示
    // @param text: 提示文本
    // @param keyCodes: 触发按键的键码数组
    // @param onKeyDown: 按键触发时的回调函数
    constructor(text, keyCodes, onKeyDown) {
        super();
        this.text = text;
        this.keyCodes = keyCodes;
        this.onKeyDown = onKeyDown;
        this.released = false;  // 用于跟踪按键是否已释放
        this.buckets.push('start-prompt');
    }

    // 渲染提示文本
    // @param camera: 当前相机实体
    render(camera) {
        // 闪烁效果：每2秒闪烁一次，持续0.4秒
        if (this.age / 2 % 1 < 0.2) return;
        
        // 设置文本样式
        ctx.font = nomangle('18pt Courier');
        ctx.textAlign = nomangle('center');
        ctx.textBaseline = nomangle('middle');
        ctx.fillStyle = '#fff';
        
        // 渲染提示文本
        ctx.fillText(this.text, 0, 0);
    }

    // 更新提示状态
    // @param elapsed: 经过的时间
    cycle(elapsed) {
        super.cycle(elapsed);

        // 检查所有指定按键的状态
        let released = true;
        for (const keyCode of this.keyCodes) {
            let isDown = DOWN[keyCode];

            // 空格键特殊处理：支持触摸输入
            if (keyCode === 32) isDown = isDown || TOUCHES.length > 0;

            // 只有所有按键都释放时，released才为true
            released = released && !isDown;

            // 如果按键被按下且之前是释放状态
            if (isDown && this.released) {
                // 播放按键音效
                sound(...[2,,409,,.02,.02,1,.5,-2,,-316,.05,,,137,,.43,.82,.02]); // Blip 189
                this.released = false;
                this.onKeyDown();
            }
        }
        this.released = released;
    }
}
